package com.aliwo.service;

import org.springframework.web.bind.annotation.RequestBody;
import tech.powerjob.common.request.query.JobInfoQuery;
import tech.powerjob.common.response.InstanceInfoDTO;
import tech.powerjob.common.response.JobInfoDTO;
import tech.powerjob.common.response.ResultDTO;

import java.util.List;

/**
 * @author:xuyayuan
 * @date:2021/7/26 13:35
 * @description:TODO
 */
public interface JobCommonService {

    /**
     * 功能描述:复制任务
     *
     * @param jobId
     * @return tech.powerjob.common.response.ResultDTO<java.lang.Long>
     * @author xuyayuan
     */
    ResultDTO<Long> copyJob(Long jobId);

    /**
     * 功能描述:查找任务
     *
     * @param jobId
     * @return tech.powerjob.common.response.ResultDTO<tech.powerjob.common.response.JobInfoDTO>
     * @author xuyayuan
     */
    ResultDTO<JobInfoDTO> fetchJob(Long jobId);

    /**
     * 功能描述:查询该分组下所有任务
     *
     * @return tech.powerjob.common.response.ResultDTO<java.util.List < tech.powerjob.common.response.JobInfoDTO>>
     * @author xuyayuan
     */
    ResultDTO<List<JobInfoDTO>> fetchAllJob();

    /**
     * 功能描述:查询该分组下所有任务不包含删除的任务
     *
     * @return tech.powerjob.common.response.ResultDTO<java.util.List < tech.powerjob.common.response.JobInfoDTO>>
     * @author xuyayuan
     */
    ResultDTO<List<JobInfoDTO>> fetchAllJobExcludeDelete();

    /**
     * 功能描述:根据查询条件，查询任务信息
     *
     * @param powerQuery
     * @return tech.powerjob.common.response.ResultDTO<java.util.List < tech.powerjob.common.response.JobInfoDTO>>
     * @author xuyayuan
     */
    ResultDTO<List<JobInfoDTO>> queryJob(@RequestBody JobInfoQuery powerQuery);

    /**
     * 功能描述:禁用任务
     *
     * @param jobId
     * @return tech.powerjob.common.response.ResultDTO<java.lang.Void>
     * @author xuyayuan
     */
    ResultDTO<Void> disableJob(Long jobId);

    /**
     * 功能描述:启用某个任务
     *
     * @param jobId
     * @return tech.powerjob.common.response.ResultDTO<java.lang.Void>
     * @author xuyayuan
     */
    ResultDTO<Void> enableJob(Long jobId);

    /**
     * 功能描述:删除某个任务
     *
     * @param jobId
     * @return tech.powerjob.common.response.ResultDTO<java.lang.Void>
     * @author xuyayuan
     */
    ResultDTO<Void> deleteJob(Long jobId);

    /**
     * 功能描述:运行某个任务（支持延迟执行）
     *
     * @param jobId
     * @param instanceParams
     * @param delayMS
     * @return tech.powerjob.common.response.ResultDTO<java.lang.Long>
     * @author xuyayuan
     */
    ResultDTO<Long> runJob(Long jobId, String instanceParams, long delayMS);

    /**
     * 功能描述:取消某个定时任务实例
     *
     * @param instanceId
     * @return tech.powerjob.common.response.ResultDTO<java.lang.Void>
     * @author xuyayuan
     */
    ResultDTO<Void> cancelInstance(Long instanceId);

    /**
     * 功能描述:重试某个定时任务实例
     * @author xuyayuan
     * @param instanceId
     * @return tech.powerjob.common.response.ResultDTO<java.lang.Void>
     */
    ResultDTO<Void> retryInstance(Long instanceId);

    /**
     * 功能描述:停止某个任务实例
     *
     * @param instanceId
     * @return tech.powerjob.common.response.ResultDTO<java.lang.Void>
     * @author xuyayuan
     */
    ResultDTO<Void> stopInstance(Long instanceId);

    /**
     * 功能描述:查询某个任务实例的状态
     *
     * @param instanceId
     * @return tech.powerjob.common.response.ResultDTO<java.lang.Integer>
     * @author xuyayuan
     */
    ResultDTO<Integer> fetchInstanceStatus(Long instanceId);

    /*
     * 功能描述:查询某个任务实例
     * @author xuyayuan
     * @param instanceId
     * @return tech.powerjob.common.response.ResultDTO<tech.powerjob.common.response.InstanceInfoDTO>
     */
    ResultDTO<InstanceInfoDTO> fetchInstanceInfo(Long instanceId);

    //Page<JobInfoDO> findPage(QueryJobInfoRequest queryJobInfoRequestrequest, PagingParam pagingParam);
}
